SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[spAltaDeVinculaciones]
@Servicio INT,
@Legajo INT
AS
SET NOCOUNT ON
Declare @Mensaje Varchar(1000)
Declare @CargoServicio Int, @CargoLegajo Int, @AgenteServicio Int, @AgenteLegajo Int, @UbicacionServicio Int, @UbicacionLegajo Int
Declare @HorasServicio Int, @HorasLegajo Int, @SituacionRevistaServicio Int, @SituacionRevistaLegajo Int

Select @Mensaje = 'OK'

If @Legajo = -1
Begin
	Select @Mensaje = 'No se especifico un Legajo para realizar la Vinculacion'
	Goto Salir
End

If @Servicio = -1
Begin
	Select @Mensaje = 'No se especifico un Servicio para realizar la Vinculacion'
	Goto Salir
End

-- EL SERVICIO YA TIENE ASIGNADO UN LEGAJO SALARIAL
If @Servicio <> -1 And @Legajo <> -1 And Exists(Select * From LegajosSalariales Where idServicioAgente = @Servicio And LegajoSalarial Is Not Null)
Begin
	Select @Mensaje = 'El Servicio ya tiene asignado un legajo salarial. Utilize Desvincular y luego Vincular nuevamente'
	Goto Salir
End

-- EL SERVICIO YA TIENE UNA VINCULACION PARA ESE O OTRO LEGAJO SALARIAL
If @Servicio <> -1 And @Legajo <> -1 And Exists (Select * From tb_Vinculaciones Where Servicio = @Servicio And Estado = 2)
Begin
	Select @Mensaje = 'El servicio tiene una vinculacion pendiente (sin ejecutar)'
	Goto Salir
End

--SI NO COINCIDEN CARGO, UBICACION, AGENTE ENTRE LEGAJO Y SERVICIO
Select @CargoServicio = CargoSalarial, @AgenteServicio = Documento, @UbicacionServicio = Cuise,  @HorasServicio = Case C.RegimenSalarial When 13 Then Horas Else 0 End,
	@SituacionRevistaServicio = SituacionRevista
	From LegajosSalariales
	Inner Join tb_Cargos C On idCargo = CargoSalarial
	Where idServicioAgente = @Servicio

Select @CargoLegajo = Cargo, @AgenteLegajo = Nro_Doc, @UbicacionLegajo = Ubicacion, @HorasLegajo = Horas_Cat,
	@SituacionRevistaLegajo = Case Revista When 'I' Then 2 Else 1 End
	From CESIDA03 Where Legajo = @Legajo

If @CargoServicio <> @CargoLegajo Or @AgenteServicio <> @AgenteLegajo Or @UbicacionServicio <> @UbicacionLegajo Or @SituacionRevistaServicio <> @SituacionRevistaLegajo
Begin
	Select @Mensaje = 'No coincide alguno de los campos: Cargo, Agente, Ubicacion, Horas entre Servicios y Legajo. \n Debe crear novedades para luego poder vincular'
	Goto Salir
End 

-- LA SUMA DE HORAS DEBE ESTAR DENTRO DEL TOTAL DEL LEGAJO
Declare @HorasAcumuladas Int
Select @HorasAcumuladas = IsNull(Sum(Horas), 0) From LegajosSalariales S Inner Join tb_Vinculaciones On Legajo = LegajoSalarial Where Legajo = @Legajo

If @HorasAcumuladas Is Null
	Select @HorasAcumuladas = 0

Select @HorasAcumuladas = @HorasAcumuladas + @HorasServicio

If @HorasLegajo <> 0.0 And @HorasLegajo < @HorasAcumuladas
Begin
	Select @Mensaje = 'La suma de horas de los servicios exede el total de horas del legajo'
	Goto Salir
End

Insert tb_Vinculaciones Select @Servicio, @Legajo, Null, 2

Salir:
	Select @Mensaje Resultado
GO
